import { defineStore } from 'pinia';
import { v4 as uuidv4 } from 'uuid';
import { useElementsPersistence } from '@/hooks/usePersistence';
import type { CanvasElement, ElementType } from '@/types';

export const useElementStore = defineStore('element', {
  state: () => ({
    // 元素列表（key: 元素id，value: 元素数据）
    elements: {} as Record<string, CanvasElement>,
    // 选中的元素id列表（支持多选）
    selectedElementIds: [] as string[],
  }),
  actions: {
    // 新增元素（核心方法，其他成员会调用）
    addElement(element: Omit<CanvasElement, 'id'>) {
      const id = uuidv4(); // 生成唯一id
      this.elements[id] = { id, ...element };
    },
    // 更新元素属性
    updateElement(id: string, updates: Partial<Omit<CanvasElement, 'id'>>) {
      if (this.elements[id]) {
        Object.assign(this.elements[id], updates);
      }
    },
    // 删除元素
    deleteElement(id: string) {
      delete this.elements[id];
      // 从选中列表中移除
      this.selectedElementIds = this.selectedElementIds.filter(selectedId => selectedId !== id);
    },
    // 选中元素（支持单选/多选追加）
    selectElements(ids: string[], isAdd = false) {
      if (isAdd) {
        // 追加选中（去重）
        this.selectedElementIds = Array.from(new Set([...this.selectedElementIds, ...ids]));
      } else {
        // 单选（覆盖）
        this.selectedElementIds = ids;
      }
    },
    // 清空选中
    clearSelection() {
      this.selectedElementIds = [];
    },
    // 复制选中元素
    copySelectedElements() {
      const selectedElements = this.selectedElementIds.map(id => this.elements[id]).filter(Boolean);
      if (selectedElements.length === 0) return;
      // 存储到临时变量（供粘贴使用）
      sessionStorage.setItem('copiedElements', JSON.stringify(selectedElements));
    },
    // 粘贴元素（偏移20px避免重叠）
    pasteElements() {
      const copiedStr = sessionStorage.getItem('copiedElements');
      if (!copiedStr) return;
      const copiedElements = JSON.parse(copiedStr) as CanvasElement[];
      copiedElements.forEach(element => {
        this.addElement({
          ...element,
          x: element.x + 20, // 水平偏移
          y: element.y + 20, // 垂直偏移
        });
      });
    },
    // 重置所有元素（清除存储）
    async resetElements() {
      this.elements = {};
      this.selectedElementIds = [];
      await import('@/utils/storageHelper').then(({ clearStorage, STORAGE_KEYS }) => {
        clearStorage(STORAGE_KEYS.ELEMENTS);
      });
    },
  },

});